package Capa_Modelo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Query;

import Capa_Datos.CD_Curso;
import Capa_Datos.CD_Detalleps;
import Capa_Datos.CD_Eap;
import Capa_Datos.CD_HistorialS;
import Capa_Datos.CD_Profesor;
import Capa_Datos.CD_Software;

public class CM_ImplHistorialDAO extends CM_BaseDao implements CM_HistorialDAO{

	
	public CM_ImplHistorialDAO(){
		super();
	}
	@Override
	public List<CD_Eap> getListaEap() {
		List<CD_Eap> lista_eap;
		try{
			
			lista_eap= new ArrayList<CD_Eap>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Eap a");
		    lista_eap=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_eap;
		
	}
	
	public List<String> getListaEap2() {
		List<String> lista_eap;
		try{
			
			lista_eap= new ArrayList<String>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Eap a");
		    lista_eap=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_eap;
		
	}
	@Override
	public List<CD_Curso> obtenerListaCursos(int selectedEap) {
		List<CD_Curso> lista_cursos;
		try{
			
			lista_cursos= new ArrayList<CD_Curso>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Curso a WHERE a.eap.idEAP =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",selectedEap);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		    lista_cursos=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_cursos;
		
	}
	@Override
	public List<CD_Profesor> obtenerListaDocentes(int selectedCurso) {
		List<CD_Profesor> lista_docentes;
		try{
			
			lista_docentes= new ArrayList<CD_Profesor>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a.profesor FROM CD_HistorialS a WHERE a.curso.idCurso =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",selectedCurso);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		    lista_docentes=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_docentes;
	}
	
	
	
	
	@Override
	public List<CD_Detalleps> obtenerListaSoftware(int numeroHistorial) {
		
		List<CD_Detalleps> listaSw;
		int valor;
		try{
		
	    valor= numeroHistorial;
	    em.getTransaction().begin();
		Query q=em.createQuery("SELECT b FROM CD_Detalleps b WHERE b.historial.idHistorial_S =: codigoh");
		//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
		
		q.setParameter("codigoh",valor);
		
		//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		listaSw=q.getResultList(); 
	    em.getTransaction().commit();
	    
	    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
			
		}
		return listaSw;
	}
	@Override
	public void eliminarSoftware(CD_Detalleps detalleh) {	    
	    try{	    
			em.getTransaction().begin();
			//em.remove(detalleh);
			Query q=em.createQuery("delete  from CD_Detalleps c where c.idDetallePS =: codigo");
			q.setParameter("codigo",detalleh.getIdDetallePS());
			q.executeUpdate();
		    em.getTransaction().commit();
		}catch(Exception e){
			System.out.print("EEEEERROR21--->"+"id:"+detalleh.getIdDetallePS()+"-"+e);								
		}
}
	@Override
	public int getNumeroHistorial(int curso, String docente) {
		List<Integer>  lista;
		
		int valor;
		try{
		
		lista= new ArrayList<Integer>();
		em.getTransaction().begin();
		Query q=em.createQuery("SELECT a.idHistorial_S FROM CD_HistorialS a WHERE a.curso.idCurso =: codigo and a.profesor.idProfesor =: codigob");
		//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
		
		q.setParameter("codigo",curso);
		q.setParameter("codigob",docente);
		//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		lista=q.getResultList(); 
	    em.getTransaction().commit();
	    
	    valor= lista.get(0);
	    
	    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return 0;
			
			
		}
		return valor;
		
	}
	@Override
	public void agregar_sw(int numerHistorial, CD_Software selectedNuevo) {
		CD_Detalleps nuevo_detalle = new CD_Detalleps();
		CD_HistorialS historial = new CD_HistorialS();
		CD_Software software = new CD_Software();
		List<CD_HistorialS>  lista;
		List<CD_Software>  lista2;
		try{
			
			lista= new ArrayList<CD_HistorialS>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_HistorialS a where a.idHistorial_S =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",numerHistorial);
			lista=q.getResultList(); 
		    em.getTransaction().commit();
		    
		    historial = lista.get(0);
		    nuevo_detalle.setHistorial(historial);
		    
		    em.getTransaction().begin();
			q=em.createQuery("SELECT b FROM CD_Software b where b.idSoftware =: codigo2");
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
			q.setParameter("codigo2",selectedNuevo.getIdSoftware());
			lista2=q.getResultList(); 
		    em.getTransaction().commit();
		    
		    software = lista2.get(0);
		    nuevo_detalle.setSoftware(software);
		    
		    
		    em.getTransaction().begin();
			em.persist(nuevo_detalle);
			em.flush();
		    em.getTransaction().commit();
		    
		    
			}catch(Exception e){
				System.out.print("EEEEEEEEEERROR1111--->"+selectedNuevo.getIdSoftware()+"---"+e);				
			}
		
	}
	@Override
	public void eliminarHistorial(int numero_historial) {
		CD_HistorialS historial = new CD_HistorialS();		
		List<CD_HistorialS> lista= new ArrayList<CD_HistorialS>();
		try{
					
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_HistorialS a WHERE a.idHistorial_S =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");			
			q.setParameter("codigo",numero_historial);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
			lista=q.getResultList(); 
		   em.getTransaction().commit();
		   historial=lista.get(0);
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR555--->"+e);							
		}  
		 try{
		    em.getTransaction().begin();
			em.remove(historial);
			//Query q=em.createQuery("delete  from CD_HistorialS c where c.idHistorial_S =: codigo");
		
			//q.setParameter("codigo",numero_historial);
			//q.executeUpdate();		    
		    em.getTransaction().commit();
			}catch(Exception e){
				System.out.print("EEEEEEEEEERROR222222--->"+historial.getIdHistorial_S()+"--"+e.getMessage()+"/////"+e.getCause());
				
				
				
			}
	
	
	}
	@Override
	public void crearHistorial(int curso, String docente) {
		CD_HistorialS nuevo_historial = new CD_HistorialS();
		CD_Curso cursoNuevo;
		CD_Profesor docenteNuevo;
		List<CD_Curso> listac= new ArrayList<CD_Curso>();
		List<CD_Profesor> listad= new ArrayList<CD_Profesor>();
		
		em.getTransaction().begin();
		Query q=em.createQuery("SELECT a FROM CD_Curso a where a.idCurso =: codigo");
		//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
		
		q.setParameter("codigo",curso);
		listac=q.getResultList(); 
	    em.getTransaction().commit();	    
	    cursoNuevo = listac.get(0);
	    	    
	    em.getTransaction().begin();
		q=em.createQuery("SELECT b FROM CD_Profesor b where b.idProfesor =: codigo2");
		//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		q.setParameter("codigo2",docente);
		listad=q.getResultList();		
	    em.getTransaction().commit();
	    docenteNuevo=listad.get(0);
	    
	    nuevo_historial.setProfesor(docenteNuevo);
	    nuevo_historial.setCurso(cursoNuevo);
	    em.getTransaction().begin();
	    em.persist(nuevo_historial);
	    em.flush();
	    em.getTransaction().commit();
		
	}
	@Override
	public List<CD_Profesor> getDocentesGeneral() {
		List<CD_Profesor> listap;
		em.getTransaction().begin();
		Query q=em.createQuery("SELECT b FROM CD_Profesor b");				
		listap=q.getResultList();		
		em.getTransaction().commit();
		
		return listap;
	}

}
